package com.PAT.problem;

import com.sun.istack.internal.NotNull;

import java.util.Scanner;


/**
 * Created with IntelliJ IDEA.
 *
 * @Author: zjz
 * @Date: 2022/02/20/23:28
 * @Description:
 * @Target:内存超限，只拿了2分
 */
public class 天长地久 {

/*“天长地久数”是指一个 K 位正整数 A，其满足条件为：A 的各位数字之和为 m，A+1 的各位数字之和为 n，且 m 与 n 的最大公约数是一个大于 2 的素数。
本题就请你找出这些天长地久数。
* 输入格式：
输入在第一行给出正整数 N（≤5），随后 N 行，每行给出一对 K（3<K<10）和 m（1<m<90），其含义如题面所述。
2
6 45
7 80

输出格式：
对每一对输入的 K 和 m，首先在一行中输出 Case X，其中 X 是输出的编号（从 1 开始）；
* 然后一行输出对应的 n 和 A，数字间以空格分隔。如果解不唯一，则每组解占一行，按 n 的递增序输出；
* 若仍不唯一，则按 A 的递增序输出。若解不存在，则在一行中输出 No Solution。
* Case 1
    10 189999
    10 279999
    10 369999
    10 459999
    10 549999
    10 639999
    10 729999
    10 819999
    10 909999
   Case 2
    No Solution

*
* */


    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = Integer.valueOf(in.nextLine());

        String[] strings = new String[n];
        for (int i = 0; i < n; i++) {
            strings[i] = in.nextLine();
        }

        for (int i = 0; i < n; i++) {
            System.out.println("Case "+ (i+1));
            String[] s = strings[i].split(" ");
            boolean flag = false;
            for (long k = getStartAndEnd(s[0])[0]; k < getStartAndEnd(s[0])[1]; k++) {
                int tempInt1  = getSumPerBit(k);
                int tempInt2  = getSumPerBit(k+1);
                if(tempInt1==Integer.valueOf(s[1])&&getMaxCommonDivisor(tempInt1,tempInt2)!=-1){
                    System.out.println(tempInt2+" "+k);
                    flag = true;
                }
            }

            if (flag==false){
                System.out.println("No Solution");
            }

        }


     /*   long[] startAndEnd = getStartAndEnd("6");
        System.out.println(startAndEnd[0]);
        System.out.println(startAndEnd[1]);

        System.out.println(getMaxCommonDivisor(10,45));
        System.out.println(getSumPerBit(909999));*/

    }

    static void process(String ss){
        String[] s = ss.split(" ");
        boolean flag = false;
        for (long i = getStartAndEnd(s[0])[0]; i < getStartAndEnd(s[0])[1]; i++) {
            int tempInt1  = getSumPerBit(i);
            int tempInt2  = getSumPerBit(i+1);
            if(tempInt1==Integer.valueOf(s[1])&&isSuShu(getMaxCommonDivisor(tempInt1,tempInt2))){
                System.out.println(tempInt2+" "+i);
                flag = true;
            }
        }

        if (flag==false){
            System.out.println("No Solution");
        }


    }


    // 入参字符串，生成两个long型，一个start，一个end
    static long[] getStartAndEnd(String ss){
        long[] longs = new long[2];
        String start = "1";
        for (int i = 1; i < Integer.valueOf(ss); i++) {
            start+="0";
        }

        for (int i = 0; i < Integer.valueOf(ss); i++) {
            longs[1]+=9*(long)Math.pow(10,i);
        }

        longs[0] = Long.valueOf(start);

        return longs;
    }


    // 素数判定
    static boolean isSuShu(long l){
        boolean flag = true;

        if (l==1||l==2||l==0){
            flag = false;
        }
        for (int i = 2; i <= (int) Math.sqrt(l); i++) {
            if (l%i==0){
                flag = false;
            }
        }


        return flag;
    }

    // 获取最大公约数且判断是不是素数
    static int getMaxCommonDivisor(int i1,int i2){
        int maxCommonDivisor = 0;

        for (int i = 1; i <= (i1<i2?i1:i2); i++) {
            if (i1%i==0&&i1%i==i2%i){
                maxCommonDivisor = i;
            }
        }

        for (int i = 2; i <= (int) Math.sqrt(maxCommonDivisor); i++) {
            if (maxCommonDivisor%i==0){
                maxCommonDivisor = -1;
            }
        }


        if (maxCommonDivisor==1||maxCommonDivisor==2||maxCommonDivisor==0){
            maxCommonDivisor = -1;
        }


        return maxCommonDivisor;
    }


    // 解析各位数，统计合
    static int getSumPerBit(long l){
        int sum = 0;
        while (l>0){
            sum += l%10;
            l/=10;
        }
        return sum;
    }
}
